package tower

import "fmt"

// Aircraft 同事类接口
type Aircraft interface {
	GetName() string
	SetMediator(mediator AirTrafficControl)
	Send(event EventType, msg string)
	Receive(message string)
	IsOnRunway() bool
	SetOnRunway(status bool)
}

// AirPlane 具体同事类
type AirPlane struct {
	name     string
	mediator AirTrafficControl
	onRunway bool
}

// NewAirPlane 创建飞机
func NewAirPlane(name string) *AirPlane {
	return &AirPlane{name: name}
}

// GetName 获取飞机名称
func (ap *AirPlane) GetName() string {
	return ap.name
}

// SetMediator 设置中介者
func (ap *AirPlane) SetMediator(mediator AirTrafficControl) {
	ap.mediator = mediator
}

// Send 发送消息
func (ap *AirPlane) Send(event EventType, msg string) {
	if ap.mediator != nil {
		ap.mediator.Notify(ap, event, msg)
	}
}

// Receive 接收消息
func (ap *AirPlane) Receive(message string) {
	fmt.Printf("[%s] 收到消息: %s\n", ap.name, message)
}

// IsOnRunway 判断是否在跑道上
func (ap *AirPlane) IsOnRunway() bool {
	return ap.onRunway
}

// SetOnRunway 设置是否在跑道上
func (ap *AirPlane) SetOnRunway(status bool) {
	ap.onRunway = status
}

// RequestLanding 请求降落
func (ap *AirPlane) RequestLanding() {
	ap.Send(EventTypeLand, "")
}

// RequestTakeoff 请求起飞
func (ap *AirPlane) RequestTakeoff() {
	ap.Send(EventTypeTakeoff, "请求起飞")
}

// ReportLocation 报告位置
func (ap *AirPlane) ReportLocation(location string) {
	ap.Send(EventTypeLocation, location)
}
